#include "stdio.h"
#include "pthread.h"  
#include "shm.h"
#include <unistd.h>

extern MQTTClient pub_client;    // MQTT发布客户端（PUB_CLIENT）
extern MQTTClient sub_client;    // MQTT订阅客户端（SUB_CLIENT）
extern void* shm_addr;    // 共享内存地址
extern int g_quit;           // 程序退出标志



int main(int argc, char* argv[])
{
     pthread_t t1, t2, t3, t4;
 // 1. 初始化共享内存
    shm_addr = shm_init();
    if (!shm_addr) {
        printf("[main] 共享内存初始化失败，退出\n");
        return -1;
    }
    printf("[main] 共享内存初始化成功(键值:0x%x,大小：%d)\n", SHM_KEY, SHM_SIZE);

    
    if (create_device_threads(&t1, &t2, &t3, &t4) != 0) {
        g_quit = 1;
        shm_destory(shm_addr);
        printf("[main] 线程创建失败，程序退出\n");
        return 0;
    }

    // 3. 等待用户退出
    printf("[main] 系统启动完成,按Q退出...\n");
    char ch;
    do {
        ch = getchar();
    } while (ch != 'Q' && ch != 'q' && !g_quit);

    // 4. 退出清理
    g_quit = 1;
    printf("[main] 开始清理资源...\n");
    msg_queue_destory(&queue);

    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    pthread_join(t3, NULL);
    pthread_join(t4, NULL);

    shm_destory(shm_addr);
    printf("连接进程退出\n");
    return 0;
}
